%Szczegółowy opis nowego lub usprawnienia istniejącego algorytmu

\section{Wykorzystywane mechanizmy}

\begin{itemize}
	\item Kodowanie rozwiązania do genotypu polega na zapisaniu ciągu współrzędnych kolejnych kliknięć do postaci binarnej. Stała liczba bitów jest przydzielona na kolejne współrzędne (integer).
	\item Dekodowanie genotypu polega na ponownym odczytaniu współrzędnych z postaci binarnej.
 	\item Funkcja dopasowania dla danego rozwiązania przeprowadza symulację gry na planszy i po wykonaniu wszystkich ruchów zlicza niewykorzystane kulki w celu obliczenia wyniku. Wynik determinuje dopasowanie osobnika.
 	\item Operator krzyżowania rozwiązań będzie polegał na przecięciu na (niekoniecznie równej długości) dwie części i połączeniu dwóch genotypów.
 	\item Operator mutacji będzie polegał na zmianie jednego z elementów rozwiązania na kliknięcie gdzieś w pobliżu poprzez inkrementację lub dekrementację jednej lub obu liczb odpowiadających za współrzędne.
\end{itemize}

\section{Działanie algorytmu}

\begin{itemize}
	\item Populacja początkowa zostanie zainicjalizowana mieszanką rozwiązań losowych, rozwiązań zachłannych i ewentualnymi rozwiązaniami z góry zdeterminowanymi (np. zawsze klikanie w lewy dolny róg).
	\item Dla osobników populacji zostanie obliczona funkcja dopasowania wymieniona powyżej, ponieważ jest ona kosztowna obliczeniowo, istnieje możliwość obliczenia jej tylko dla losowo (lub nie, w różnych wersjach) wybranego podzbioru osobników. Część osobników o najmniejszym dopasowaniu zostanie odrzucona.
	\item Na pozostałych osobnikach zostaną użyte operatory krzyżowania i mutacji z odpowiednio dobranym prawdopodobieństwiem - dla dobra symulacji algorytm zostanie przetestowany z różnymi współczynnikami.
\end{itemize}

\section{Oczekiwane zalety rozwiązania}

\begin{itemize}
	\item Algorytm ten jest łatwy w implementacji, zarówno proces kodowania genotypu jak i operatory działają w sposób prosty.
	\item Algorytm powinien pozwalać zachować i promować pewne ''dobre ruchy'' czyli grupy kliknięć prowadzące do ściągnięcia dużej ilości kulek na raz.
	\item Jako algorytm z gatunku algorytmów ewolucyjnych jest bardzo uniwersalny i pozwoli na uzyskanie sensownych wyników nawet bez lub przed dogłębną analizą problemu i strategii go rozwiązujących.
\end{itemize}

\section{Rozwinięcia i usprawnienia}
\begin{itemize}
	\item W wyniku wykonywanych ruchów, kulki opadają w dół i zmiana kolejności wykonywanych kliknięć może prowadzić do różnych wyników. W związku z tym ruchy zapisane w postaci współrzędnych, w przypadku krzyżowania mogą skutkować sytuacją w której zamiast nacisnąć daną kulkę, naciskamy miejsce w którym ta kulka była. Dlatego w trakcie przetwarzania rozwiązań będziemy śledzić konkretne kulki w które klikamy, a nie same współrzędne. - Czyli poprawiać zmieniające się współrzędne.
	\item Symulacja populacji w algorytmie genetycznym może zostać przeprowadzona z różnymi współczynnikami odpowiedzialnymi za prawdopodobieństwo krzyżowania i mutacji, za ilość eliminowanych osobników w każdej iteracji itd. Dlatego też zostanie przeprowadzona z różnymi współczynnikami by uzyskać parametry najskuteczniejsze dla tego problemu.
	\item Genotyp będący dokłądną bitową reprezentacją współrzędnych jest łątwy w kodowaniu i dekodowaniu, jednak oprócz tego nie posiada dobrych cech. W celu poprawy wydajności programu można rozważyć zakodowanie genotypu do najkrótszej możliwej jednoznacznej postaci. W celu zbadania specjalnych matematycznych właściwości innych postaci genotypu, należy rozważyć możliwość krzyżowania genotypów bez zachowania reprezentacji współrzędnych.
\end{itemize}
